(define (Lc-exp? Lc-exp)
    (or
        (var-exp? Lc-exp)
        (lambda-exp? Lc-exp)
        (app-exp? Lc-exp)
    )
)


(define (var-exp? Lc-exp)
    (symbol? Lc-exp)
)


(define (lambda-exp? Lc-exp)
    (and 
        (eqv? `lambda (car Lc-exp))
        (var-exp? (list (cadr Lc-exp)))
        (Lc-exp? (caddr Lc-exp))
        (null? (cdddr Lc-exp))
    )
)


(define (app-exp? Lc-exp)
    (and
        (Lc-exp? (car Lc-exp))
        (Lc-exp? (cadr Lc-exp))
        (null? (cddr Lc-exp))
    ) 
)


(define (lambda-exp var Lc-exp)
    (list
        `lambda
        (list var)
        Lc-exp
    )
)
